#ifndef DEF_QDESSINGL
#define DEF_QDESSINGL
 
#include <QApplication>
#include <QGLWidget>
#include <QtGui>
#include <fstream>
 
class Image;
class Masque;
class InpaintingThese;

class QDessinGL : public QGLWidget
{

    Q_OBJECT

private:
    QString nomFichier;
    Image* im;/*!< Image à charger*/
    Image* u;/*!< Image à l'iteration u*/
    Image* u1;/*!< Image à l'iteration u+1*/
    Image* laplacien;/*!< Laplacien de l'image chargée*/
    Image* laplacienU;/*!< Laplacien de l'image a l'itération u*/
	Image* gradientX;
	Image* gradientY;
	InpaintingThese* inp;
    Masque* m;/*!< Masque à Inpainter*/
    int MousePrevX;/*!< Position en X de la souris au rendu précédent*/
    int MousePrevY;/*!< Position en Y de la souris au rendu précédent*/
	/*Algo simple*/
	double deltat;/*!< deltat de l'algo simple*/
	double lambda;/*!< lambda de l'algo simple*/
	/*Algo papier*/
	double deltat2;/*!< deltat de l'algo isophote*/
	double deltat3;/*!< deltat de la diffusion aniso des pour isophote*/
	double lambda2;/*!< lambda de la diffusion aniso*/
	/*Algo these*/
	double deltat4;/*!< deltat de tenseur */
	double sigma;/*!< sigma tenseurs*/
	bool Nvecteurs;/*!< normaliser les vecteurs propres (tenseur)*/
	int randMask;

    int nbIter;
    bool previsu;
    bool algoLaunched;
    double zoom;
    int xImg,yImg;
	int algo;

public slots:
    void setTaillePinceau(int taille);
	/*Algo simple*/
	void setDeltat(double val);
	void setLambda(double val);
	/*Algo papier*/
	void setDeltat2(double val);
	void setDeltat3(double val);
	void setLambda2(double val);
	/*Algo these*/
	void setDeltat4(double val);
	void setSigma(double val);
	void setNvecteurs(bool val);
	void setRandMask(int val);

	void setAlgo(int val);
    void setNbIter(int val);
    void setPrevisu(bool val);
	void Lauch();
	void algoSimple();
	void algoPapier();
signals :
    void nbItCh(QString);
	void nbItPr(int);
public:
    QDessinGL(QString,QWidget *);
    ~QDessinGL();
    void initializeGL();
    void resizeGL(int,int);
    void paintGL();
    void setFichier(QString);
	void setMasque(QString);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void keyPressEvent(QKeyEvent * event);
    void wheelEvent(QWheelEvent *event);
	bool getPrevisu();


};
 
#endif

